package com.lesama.bigdecimal;

/*
    BigDecimal创建对象；
        public BigDecimal(double val): 不推荐， 无法保证小数运算的准确性
        ---------------------------------------------------------

        public BigDecimal(String val): 传入字符串
        public static BigDecimal valueOf(double val)

    常见成员方法：
        public BigDecimal add(BigDecimal b): 加法
        public BigDecimal substract(BigDecimal b): 减法
        public BigDecimal multiply(BigDecimal b): 乘法
        public BigDecimal divide(BigDecimal b): 除法
        public BigDecimal divide(BigDecimal b, 精确几位， 舍入模式): 除法

 */

import java.math.BigDecimal;
import java.math.RoundingMode;

public class BigDecimalDemo {
    public static void main(String[] args) {
        BigDecimal bd1 = new BigDecimal("0.1");
        BigDecimal bd2 = new BigDecimal("0.2");
        BigDecimal result = bd2.add(bd1);
        System.out.println(result);
        BigDecimal bigDecimal1 = BigDecimal.valueOf(0.1);
        BigDecimal bigDecimal2 = BigDecimal.valueOf(0.2);
        System.out.println(bigDecimal2.add(bigDecimal1));
        System.out.println(bigDecimal2.subtract(bigDecimal1));
        System.out.println(bigDecimal2.multiply(bigDecimal1));
        System.out.println(bigDecimal2.divide(bigDecimal1));
        BigDecimal bigDecimal3 = BigDecimal.valueOf(1.0);
        BigDecimal bigDecimal4 = BigDecimal.valueOf(0.3);
        System.out.println(bigDecimal3.divide(bigDecimal4, 2, RoundingMode.HALF_EVEN));
        System.out.println(bigDecimal3.divide(bigDecimal4, 2, RoundingMode.HALF_UP)); // 四舍五入
        System.out.println(bigDecimal3.divide(bigDecimal4, 2, RoundingMode.HALF_DOWN));
        System.out.println(bigDecimal3.divide(bigDecimal4, 2, RoundingMode.DOWN)); // 向下取整
        System.out.println(bigDecimal3.divide(bigDecimal4, 2, RoundingMode.UP)); // 向上取整
    }
    public static void method1() {
        // 无法精确计算 0.3000000000000000166533453693773481063544750213623046875
        BigDecimal bd1 = new BigDecimal(0.1);
        BigDecimal bd2 = new BigDecimal(0.2);
        System.out.println(bd1.add(bd2));
    }
}
